import { post, put, getBlob, get, postBlob } from '@/utils/request'

export default class User {
  /**
   * 注册
   * @param {string} username 用户名
   * @param {string} password 密码
   * @param {string} email 邮箱
   * @returns
   */
  static async register(username, password, email) {
    return post('/register', {
      username,
      password,
      email,
    })
  }

  /**
   * 激活
   * @param {string} username 用户名
   * @param {string} password 密码
   * @param {string} email 邮箱
   * @returns
   */
  static async activation(userId, code) {
    return put('/activation/' + userId + '/' + code)
  }

   /**
   * 验证码
   * @returns
   */
   static async kaptcha() {
    return getBlob('/kaptcha')
  }

  /**
   * 登录
   * @param {string} username 用户名
   * @param {string} password 密码
   * @param {string} code 验证码
   * @param {boolean} rememberMe 记住我状态
   * @returns
   */
  static async login(username, password, code, rememberMe) {
    return post('/login', {
      username,
      password,
      code,
      rememberMe
    })
  }

  /**
   * 注销
   * @returns
   */
  static async logout() {
    return put('/logout')
  }

  /**
   * 发送验证码
   * @param {string} email 邮箱
   * @returns
   */
  static async sendCode(email) {
    return get('/forget/code', {
      email
    })
  }

  /**
   * 重置密码
   * @param {string} email 邮箱
   * @param {string} code 验证码
   * @param {string} password 密码
   * @returns
   */
  static async forget(email, code, password) {
    return put('/forget', {
      email,
      code,
      password
    })
  }

  /**
   * 重置密码
   * @param {string} oldPassword 旧密码
   * @param {string} newPassword 新密码
   * @returns
   */
  static async resetPassword(oldPassword, newPassword) {
    return put('user/reset', {
      oldPassword,
      newPassword
    })
  }

  /**
   * 上传头像
   * @param {file} formData 头像图片
   * @returns
   */
  static async upload(formData) {
    return postBlob('user/upload', formData)
  }

  /**
   * 获得用户信息
   * @param {int} userId 用户id
   * @returns
   */
  static async getUserInfo(userId) {
    return get('user/' + userId + '/info')
  }
}
